/// is a package and edges represent dependencies between packages.
///
/// Each instance of `Resolve` also understands the full set of features used
-/// for each package as well as what the root package is.
+/// for each package.
#[derive(PartialEq, Eq, Clone)]
pub struct Resolve {
graph: Graph<PackageId>,
replacements: HashMap<PackageId, PackageId>,
features: HashMap<PackageId, HashSet<String>>,
checksums: HashMap<PackageId, Option<String>>,
- root: PackageId,
metadata: Metadata,
}
self.graph.iter()
}
- pub fn root(&self) -> &PackageId {
- &self.root
- }
-
pub fn deps(&self, pkg: &PackageId) -> Deps {
Deps { edges: self.graph.edges(pkg), resolve: self }
}
}
/// Builds the list of all packages required to build the first argument.
-pub fn resolve(root: &PackageId,
- summaries: &[(Summary, Method)],
+pub fn resolve(summaries: &[(Summary, Method)],
replacements: &[(PackageIdSpec, Dependency)],
registry: &mut Registry) -> CargoResult<Resolve> {
let cx = Context {
activations: HashMap::new(),
replacements: replacements,
};
- let _p = profile::start(format!("resolving: {}", root));
+ let _p = profile::start(format!("resolving"));
let cx = try!(activate_deps_loop(cx, registry, summaries));
let mut resolve = Resolve {
graph: cx.resolve_graph,
features: cx.resolve_features,
- root: root.clone(),
checksums: HashMap::new(),
metadata: BTreeMap::new(),
replacements: cx.resolve_replacements,
None => root_replace.to_vec(),
};
- let mut resolved = try!(resolver::resolve(try!(ws.current()).package_id(),
- &summaries,
- &replace,
- registry));
+ let mut resolved = try!(resolver::resolve(&summaries, &replace, registry));
if let Some(previous) = previous {
try!(resolved.merge_from(previous));
}
-> CargoResult<Vec<PackageId>> {
let summary = Summary::new(pkg.clone(), deps, HashMap::new()).unwrap();
let method = Method::Everything;
- Ok(try!(resolver::resolve(&pkg,
- &[(summary, method)],
+ Ok(try!(resolver::resolve(&[(summary, method)],
&[],
registry)).iter().map(|p| {
p.clone()